package com.tjbank.cssys.web.controller;

import com.tjbank.cssys.dto.OrganDTO;
import com.tjbank.cssys.dto.PostDTO;
import com.tjbank.cssys.dto.RoleDTO;
import com.tjbank.cssys.dto.UserDTO;

import com.tjbank.cssys.service.impl.CaptchaService;
import com.tjbank.cssys.web.config.GetUserCodeFromToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.tjbank.cssys.framework.base.api.BaseController;
import com.tjbank.cssys.framework.base.api.Response;
import com.tjbank.cssys.api.OrganService;
import com.tjbank.cssys.api.PostService;
import com.tjbank.cssys.api.RelationIDService;
import com.tjbank.cssys.api.RoleService;
import com.tjbank.cssys.api.TenantService;
import com.tjbank.cssys.api.UserService;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.UUID;

/**
 * 跳过登陆 + Feign
 * 
 * Package : com.tansun.magicube.iam.web.controller
 * 
 * @author -- lijiangtao 2020年6月29日 下午2:19:37
 *
 */
@RestController
@RequestMapping("/api")
public class FilterController extends BaseController {

	/** 租户 **/
	@Autowired
	private TenantService tenantService;

	/** 用户 **/
	@Autowired
	private UserService userService;

	/** 角色 **/
	@Autowired
	private RoleService roleService;

	/** 机构 **/
	@Autowired
	private OrganService organService;

	/** 岗位 **/
	@Autowired
	private PostService postService;

	/** 验证码 **/
	@Autowired
	private CaptchaService captchaService;

	/** 关联关系ID **/
	@Autowired
	private RelationIDService relationIDService;

	private static final Logger logger = LoggerFactory.getLogger(FilterController.class);

	/**
	 * 查询已启用的租户
	 * 
	 * @return
	 * @author -- lijiangtao 2020年6月28日 下午4:13:15
	 */
	@GetMapping("/tenant")
	public Response<?> queryTenant(HttpServletRequest request) {




		return this.success(tenantService.queryTenant());
	}

	/**
	 * 验证码
	 * 
	 * @param response
	 * @author -- lijiangtao 2020年7月6日 下午5:46:06
	 * @return
	 */
	@GetMapping("/captcha")
	public Response<?> getSecurityCode(HttpServletRequest request,String user) {




		return this.success(captchaService.getSecurityCode(user));
	}

	/**
	 * 根据租户Code分页查询用户信息
	 *
	 * @param userDTO
	 * @param pageable
	 * @return
	 * @author -- lijiangtao 2020年7月26日 上午2:31:04
	 */
	@GetMapping("/user")
	public Response<?> queryUserByTenantCode(UserDTO userDTO, Pageable pageable ,HttpServletRequest request) {



		return this.success(userService.queryUserByTenantCode(userDTO, pageable));
	}

	/**
	 * 根据租户Code分页查询角色信息
	 *
	 * @param roleDTO
	 * @param pageable
	 * @return
	 * @author -- lijiangtao 2020年5月7日 下午2:12:04
	 */
	@GetMapping("/role")
	public Response<?> queryRoleByTenantCode(RoleDTO roleDTO, Pageable pageable ,HttpServletRequest request) {


		return this.success(roleService.queryRoleByTenantCode(roleDTO, pageable));
	}

	/**
	 * 根据租户Code分页查询机构信息
	 * 
	 * @param organDTO
	 * @param pageable
	 * @return
	 * @author -- lijiangtao 2020年7月26日 上午12:03:13
	 */
	@GetMapping("/organ")
	public Response<?> queryOrganByTenantCode(OrganDTO organDTO, Pageable pageable ,HttpServletRequest request) {




		return this.success(organService.queryOrganByTenantCode(organDTO, pageable));
	}

	/**
	 * 根据租户Code分页查询岗位信息
	 * 
	 * @param postDTO
	 * @param pageable
	 * @return
	 * @author -- lijiangtao 2020年7月26日 上午12:11:57
	 */
	@GetMapping("/post")
	public Response<?> queryPostByTenantCode(PostDTO postDTO, Pageable pageable ,HttpServletRequest request) {




		return this.success(postService.queryPostByTenantCode(postDTO, pageable));
	}

	/**
	 * 通过岗位ID查询用户ID.
	 * 
	 * @param positionId 岗位ID
	 * @return 该岗位下的所有用户ID.
	 * @author: guzheng01@tansun.com.cn
	 */
	@GetMapping("/userId/positionId")
	public Response<?> queryUserByPosition(String positionId ,HttpServletRequest request) {

		return this.success(relationIDService.queryUserIdByPostId(positionId));
	}
}
